package com.kurt.repository;

import com.kurt.entity.SysVehicleDriver;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 车辆驾驶员关联Repository接口
 * 提供车辆驾驶员关联数据访问方法
 */
@Repository
public interface SysVehicleDriverRepository extends JpaRepository<SysVehicleDriver, Long>, JpaSpecificationExecutor<SysVehicleDriver> {

    /**
     * 根据车辆ID查找关联的驾驶员列表
     *
     * @param vehicleId 车辆ID
     * @return 车辆驾驶员关联列表
     */
    List<SysVehicleDriver> findByVehicleId(Long vehicleId);

    /**
     * 根据驾驶员ID查找关联的车辆列表
     *
     * @param driverId 驾驶员ID
     * @return 车辆驾驶员关联列表
     */
    List<SysVehicleDriver> findByDriverId(Long driverId);

    /**
     * 根据车辆ID和驾驶员ID查找关联记录
     *
     * @param vehicleId 车辆ID
     * @param driverId  驾驶员ID
     * @return 车辆驾驶员关联记录
     */
    Optional<SysVehicleDriver> findByVehicleIdAndDriverId(Long vehicleId, Long driverId);

    /**
     * 检查车辆和驾驶员是否已绑定
     *
     * @param vehicleId 车辆ID
     * @param driverId  驾驶员ID
     * @return 是否已绑定
     */
    boolean existsByVehicleIdAndDriverId(Long vehicleId, Long driverId);

    /**
     * 根据车辆ID删除所有关联记录
     *
     * @param vehicleId 车辆ID
     */
    void deleteByVehicleId(Long vehicleId);

    /**
     * 根据驾驶员ID删除所有关联记录
     *
     * @param driverId 驾驶员ID
     */
    void deleteByDriverId(Long driverId);

    /**
     * 根据车辆ID和驾驶员ID删除关联记录
     *
     * @param vehicleId 车辆ID
     * @param driverId  驾驶员ID
     */
    void deleteByVehicleIdAndDriverId(Long vehicleId, Long driverId);

}